/*
 * $AIST_Release: 0.9.0 $
 * Copyright 2011 Information Technology Research Institute, National
 * Institute of Advanced Industrial Science and Technology
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *    http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package parser

import scala.util.parsing.input.Position

/**
 * Module for compile-time messages.
 */
object Messages {

  /**
   * Message level.
   */
  sealed trait Level

  /**
   * Message level - Error
   */
  case object Error extends Level

  /**
   * Message level - Warning
   */
  case object Warning extends Level

  /**
   * Message
   *
   * @param level Message level.
   * @param pos   Positon of source file.
   * @param fmt   Message(format)
   */
  class Message(level: Level, pos: Position, fmt: String, args:Any*) {
    private val msg = fmt.format(args:_*)

    override def toString() = "[%s] %s: %s\n\n%s".format(pos, level.toString.toLowerCase, msg, pos.longString)
  }

  /**
   * Empty message list;
   */
  val emptyMessages: List[Message]  = Nil

  /**
   * Makes error message.
   */
  def error(p: Position, fmt: String, args:Any*)   = new Message(Error, p, fmt, args:_*)

  /**
   * Makes warning message.
   */
  def warning(p: Position, fmt: String, args:Any*) = new Message(Warning, p, fmt, args:_*)
}
